perm filename FILLER.F4[MSS,LCS]4 blob
sn#107261 filedate 1974-06-15 generic text, type T, neo UTF8
00002 C***** FILLER, HGHT, MISS, HALF ********
00005 C Q AND R ARE X,Y COORDS. NE(1)=WDCNT. OTHER NE'S HAVE 3
00007 C FOR INVIS. VECTORS. M=VERTICAL SCAN LINES
00010 SUBROUTINE FILLER(Q,R,NE,M)
00200 DIMENSION Q(1),R(1),NE(1)
00500 KK=NE(1)
00510 NX=-10000
00520 JN=NX
00600 KJ=2
00700 DO 4 K=2,KK
00800 IF(NE(K).NE.3)GO TO 11
00900 NE(K)=KJ
01000 KJ=K+1
01100 GO TO 4
01200 11 NE(K)=0
01300 4 CONTINUE
01310 DO 12 K=1,KK
01320 Q(K)=IFIX(Q(K))
01330 12 R(K)=IFIX(R(K))
01400 NE(KK+1)=KJ
01500 C FINDS JUMPS
02200 DO 2 J=2,KK
02300 IF(NE(J).GT.0.OR.Q(J).EQ.Q(J-1))GO TO 2
02400 C SKIPS VERTICAL LINES
02410 XMID=HALF(Q,J)+.00001
02500 C MIDPOINT OF LINE
02600 ALT=HALF(R,J)
02700 C THE ALTITUDE
02800 KJ=0
02810
02900 100 DO 3 L=2,KK
03000 IF(L.EQ.J.OR.NE(L).GT.0)GO TO 3
03100 C NEXT FINDS LINE OVERLAP
03205 IF(MISS(L,XMID,Q))GO TO 3
03800 C NEXT FINDS ALT. OF CROSSING
03900 40 Y=HGHT(L,XMID,Q,R)
04000 IF(Y.LT.ALT)KJ=KJ+1
04100 3 CONTINUE
04110
04200 IF(MOD(KJ,2).EQ.0)GO TO 2
04300 C NEXT IF FOUND A LINE TO DRAW LINES DOWN FROM.
04400 NE(J)=-1
05215 KJ=M
05235 N=Q(J)
05255 L=Q(J-1)
05256 CC IF(IABS(N-L).LE.M)GO TO 2
05257 C SKIPS SEGS SHORTER THAN M INCREMENT.
05258 ALT=.0001
05260 IF(N.GT.L)GO TO 33
05270 KJ=-KJ
05275 ALT=-ALT
05280 33 IF(L.EQ.NX.AND.JN.EQ.J-1)GO TO 17
05285 JA=3
05290 X=-1
05295 17 NX=N
05296 JN=J
05346
05396 CC34 L=L+KJ/2
05408 DO 6 K=L,N,KJ
05414 RK=K
05420 XK=RK
05426 IF(K.EQ.N)ALT=-ALT
05433 C NO SHIFT AT LAST POSITION
05466 RK=RK+ALT
05501 Y=HGHT(J,RK,Q,R)
05605 CC1000 YK=Y-1
05611 IF(X)CALL LINES(XK,Y,JA)
05620 JA=2
05700 H=-10000
05800
05900 18 DO 7 I=2,KK
06000 IF(NE(I).NE.0)GO TO 7
06100 C SKIP IF SAME LINE.
06200 IF(MISS(I,RK,Q))GO TO 7
06400 C TRY NEXT POINT IF IT HIT A -1 LINE.
07000 9 B=HGHT(I,RK,Q,R)
07100 IF(B.GT.Y)GO TO 7
07200 IF(B.LE.H)GO TO 7
07300 H=B
07310 IX=I
07500 C FOUND HIGHEST NEW POINT
07600 7 CONTINUE
07700 IF(H.EQ.Y)GO TO 31
07800 C WIPES OUT THIS LINE SEG.
08200 IF(H.NE.-10000)GO TO 31
08205 NX=-10000
08300 C*** X=1
08302 X=-1
08305 GO TO 6
08308 31 IF(IX.NE.JX.AND.X.GT.0)JA=3
08309 JX=IX
08311 CALL LINES(XK,H,JA)
08314 JA=2
08320 IF(X.GT.0)CALL LINES(XK,Y,JA)
08350 X=-X
08360 600 GO TO 6
08370 CALL DPYOUT(1)
08500 6 CONTINUE
08510 2 CONTINUE
08600
12000 END
13000
13100 FUNCTION HGHT(J,A,Q,R)
13110 DIMENSION Q(1),R(1)
13120 B=R(J-1)
13130 D=Q(J-1)
13140 F=Q(J)
13200 HGHT=((R(J)-B)*(A-D))/(F-D)+B
13250 IF(F.EQ.D)HGHT=B
13300 END
13400
14700 FUNCTION MISS(J,A,Q)
14800 DIMENSION Q(1)
14900 B=Q(J)
15000 C=Q(J-1)
15100 MISS=-1
15150 IF((A.LT.C.AND.A.GT.B).OR.(A.LT.B.AND.A.GT.C))MISS=0
16000 END
16100 C MISS=-1, HIT=0
16200
16300 FUNCTION HALF(A,J)
16400 DIMENSION A(1)
16500 HALF=(A(J-1)-A(J))/2.+A(J)
16600 END